home *** CD-ROM | disk | FTP | other *** search
-
- { Return offset of MIDI velocity data in
- Track Event message, if present
- }
- function midi_vel_offset(eblk:track_event_block;
- chan:byte):integer;
- var
- offset : integer;
- begin
- midi_vel_offset:=ERR; { default return value }
- { only MIDI key events have velocity }
- offset:=midi_key_offset(eblk,chan);
- if (offset <> ERR) then
- midi_vel_offset:=offset+1;
- end;
-
- { Return MIDI velocity data from Track Event, if present
- }
- function get_midi_vel(eblk:track_event_block;
- chan:byte):integer;
- var
- vel_offset : integer;
- begin
- get_midi_vel:=ERR; { default return value }
- vel_offset:=midi_vel_offset(eblk,chan);
- if (vel_offset <> ERR) then
- get_midi_vel:=eblk.event.mess[vel_offset];
- end;
-
- { Set MIDI velocity value in Track Event,
- if Track Event is of appropriate type
- }
- procedure set_midi_vel(var eblk:track_event_block;
- chan,vel:integer);
- var
- vel_offset : integer;
- begin
- vel_offset:=midi_vel_offset(eblk,chan);
- if (vel_offset <> ERR) then
- eblk.event.mess[vel_offset]:=vel;
- end;
-
- { Scale all MIDI velocity data for
- a channel in a Track Data block
- }
- procedure scale_vel(var tdi,tdo:track_data_block;
- chan:integer; vel_fact:real);
- var
- curr_vel : integer;
- begin
- reset_track_data(tdi);
- reset_track_data(tdo);
- while not(tdi.edat) do
- begin
- next_track_event(tdi);
- curr_vel:=get_midi_vel(tdi.curr,chan);
- if (curr_vel <> ERR) then
- set_midi_vel(tdi.curr,chan,trunc(curr_vel*vel_fact));
- store_track_event(tdo,tdi.curr);
- end;
- end;
-
- l <> ERR) then
- set_midi_vel(tdi.curr,chan,trunc(curr_vel*vel_fact));
- store_track_event(tdo,tdi.curr);
- end;
- e